package com.kaikeba.service;

import com.kaikeba.bean.BootStrapTableCourier;
import com.kaikeba.bean.Courier;
import com.kaikeba.dao.BaseCourierDao;
import com.kaikeba.dao.impl.CourierDaoMysql;
import com.kaikeba.exception.DuplicateCodeException;
import com.kaikeba.util.DateFormatUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @description:
 * @author: ManolinCoder
 * @time: 2021/9/3
 */
public class CourierService {
    private static BaseCourierDao dao = new CourierDaoMysql();
    /**
     * @return [{size:总数,day:新增}]
     * @Author LC
     * @Description //TODO 查询快递员表中所有记录包括总数和新增（新增就是注册时间与当前时间相同）
     * @Date 14:56 2021/9/3
     * @Param []
     **/
    public static Map<String, Integer> console() {
        return dao.console();
    }

    /**
     * @param limit
     * @param offset
     * @param pageNumber
     * @return 快递员信息集合
     * @Author LC
     * @Description //TODO 查询所有快递员信息
     * @Date 15:02 2021/9/3
     * @Param [limit 是否分页的标记，true表示分页。false表示查询所有快递, offset SQL语句的起始索引, pageNumber 每一页查询的数量]
     */
    public static List<BootStrapTableCourier> findAll(boolean limit, int offset, int pageNumber) {
        List<Courier> courierList = dao.findAll(limit, offset, pageNumber);
        List<BootStrapTableCourier> cAfterDealWithList = new ArrayList<>();
        if (courierList.size() != 0){
            for (Courier courier : courierList) {
                String cInTime = DateFormatUtil.format(courier.getcInTime());
                String cLastLoginTime = DateFormatUtil.format(courier.getcLastLoginTime());
                String cSendNumber = courier.getcSendNumber();
                if (Integer.parseInt(courier.getcSendNumber()) > 500){
                    cSendNumber = "500+";
                }
                BootStrapTableCourier cAfterDealWith = new BootStrapTableCourier(courier.getId(),courier.getCname(),courier.getcPhoneNumber(),courier.getcIdCardNum(),courier.getcPassword(),courier.getcStatus(),cInTime,cSendNumber,cLastLoginTime);
                cAfterDealWithList.add(cAfterDealWith);
            }
            return cAfterDealWithList;
        }
        return null;
    }

    /**
     * @param phoneNumber
     * @return 查询的快递员信息，手机号不存在时返回null
     * @Author LC
     * @Description //TODO 根据快递员手机号查找对应快递员
     * @Date 15:04 2021/9/3
     * @Param [phoneNumber 快递员手机号]
     */
    public static Courier findByPhoneNumber(String phoneNumber) {
        return dao.findByPhoneNumber(phoneNumber);
    }

    /**
     * @param id
     * @return 查询的快递员信息，id不存在时返回null
     * @Author LC
     * @Description //TODO 根据快递员主键id查找对应快递员
     * @Date 16:29 2021/9/3
     * @Param [id 快递员主键id]
     */
    public static Courier findById(int id) {
        return dao.findById(id);
    }

    /**
     * @param c
     * @return 录入的结果, true表示成功, false表示失败
     * @Author LC
     * @Description //TODO 快递员信息的录入
     * @Date 15:06 2021/9/3
     * @Param [c 快递员信息对象]
     */
    public static boolean insert(Courier c) {
        try {
            return dao.insert(c);
        } catch (DuplicateCodeException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * @param id
     * @param newc
     * @return 更新的结果, true表示成功, false表示失败
     * @Author LC
     * @Description //TODO 快递员信息的更新
     * @Date 15:07 2021/9/3
     * @Param [id 要更新的快递员id, newc 新的快递员信息对象]
     */
    public static boolean update(int id, Courier newc) {
        //更新后的手机号没有重复才执行更新
        if (newc.getcPhoneNumber() != null){
            //用户更改了手机号，进行重复性验证（用户若未更改手机号则前台不用传递手机号）
            if (dao.findByPhoneNumber(newc.getcPhoneNumber()) == null){
                return dao.update(id,newc);
            }
        }else {
            //用户未修改手机号，前台没有传入。则查询当前id的手机号并赋给newc
            Courier currentC = dao.findById(id);
            newc.setcPhoneNumber(currentC.getcPhoneNumber());
            return dao.update(id, newc);
        }
        return false;
    }

    /**
     * @param id
     * @return 删除的结果, true表示成功, false表示失败
     * @Author LC
     * @Description //TODO 根据快递员的id删除相应数据
     * @Date 15:08 2021/9/3
     * @Param [id 快递员的id]
     */
    public static boolean delete(int id) {
        return dao.delete(id);
    }
}
